package com.ys.mapper.finance;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ys.entity.finance.TcwFinanceSalaryTotal;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface FinanceMapper {
	
	/**
	 * 账户流水去除验证（开始）
	 */
	public int doNoCheckBegin();
	
	/**
	 * 账户流水去除验证（结束）
	 */
	public int doNoCheckEnd();

	/**
	 * 冻结公司账户金额
	 */
	public int frozenTcwAccountCountForCompany(@Param("vgsbm")String vgsbm, @Param("amount")BigDecimal amount);

	/**
	 * 解冻公司账户金额
	 */
	public int thawTcwAccountCountForCompany(@Param("vgsbm")String vgsbm, @Param("amount")BigDecimal amount);


	/**
	 * 删除补账单
	 * @param bid
	 */
	void deleteTcwWanliSupplementaryItemBid(@Param("bid") String bid);


	/**
	 * 删除资金登记单详情表信息
	 */
	public int deleteTcwCapitalRegisterSonByPbid(@Param("pbid")String pbid);


	/**
	 * 删除预付款认领单详情表信息
	 */
	public int deleteTcwCapitalBusinessCostSonByPbid(@Param("pbid")String pbid);


	/**
	 * 删除资金认领单详情表信息
	 */
	public int deleteTcwCapitalClaimSonByPbid(@Param("pbid")String pbid);


	/**
	 * 删除万里汇提款单详情表信息
	 */
	public int deleteWorldFirstDrawingItemByPbid(@Param("pbid")String pbid);


	/**
	 * 删除万里汇CNY付款单明细
	 */
	public int deleteTcwWanliCnyPaymentByPbid(@Param("pbid")String pbid);


	/**
	 * 删除万里汇外币付款单明细
	 */
	public int deleteTcwWanliOtherPaymentByPbid(@Param("pbid")String pbid);


	/**
	 * 删除万里汇预付款对账单明细
	 */
	public int deleteTcwWanliReconciliationItemByPbid(@Param("pbid")String pbid);


	//*********万里汇CNY计算汇率相关sql--开始*********
	//万里汇货币兑换单：兑入金额（CNY）---仅兑换CNY的部分
	public List<Map<String, Object>> currencyExchangeByCny(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") Integer type);
	//万里汇提款单：汇入金额（CNY）
	public List<Map<String, Object>> wanliDrawingByCny(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") Integer type);
	//万里汇CNY付款单：汇入金额（CNY）
	public List<Map<String, Object>> cnyPaymentByCny(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") Integer type);
	//万里汇预付款退回：退回金额（CNY）
	public List<Map<String, Object>> paymentReturnByCny(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("type") Integer type);
	//*********万里汇CNY计算汇率相关sql--结束*********

	/**
	 * 删除万里汇预付款入账单详情表信息
	 */
	public int deleteWanliPrepaymentRecordedItemByPbid(@Param("pbid")String pbid);

	/**
	 * 统计万里汇货币兑换单(兑出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumWanliCurrencyExchangeOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇货币兑换单(兑入)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumWanliCurrencyExchangeIn(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇提款单(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumWanliDrawingOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇CNY付款单(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumWanliCnyPaymentOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇预付款退回(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumWanliPaymentReturnOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇外币付款单(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumWanliOtherPaymentOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇CNY付款单手续费(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumFeeWanliCnyPaymentOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇提款单手续费(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumFeeWanliDrawingOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇预付款退回手续费(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumFeeWanliPaymentReturnOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇外币付款单手续费(支出)
	 * @param currencyCode 币种编码
	 */
	public BigDecimal sumFeeWanliOtherPaymentOut(@Param("currencyCode")String currencyCode,
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);

	/**
	 * 统计万里汇CNY金额
	 */
	public BigDecimal sumAmountCNY(
			@Param("reconciliationDayBegin")String reconciliationDayBegin,
			@Param("reconciliationDayEnd")String reconciliationDayEnd);



	/**
	 * 根据月份信息，删除财务工资小计汇总表
	 */
	public int deleteTcwFinanceSalaryTotalByCountMonth(@Param("countMonth") String countMonth);


	//根据部门，获取统计工资信息
	List<Map<String, Object>> countFinanceSalaryTotalByDept(@Param("countMonth") String countMonth);

	//根据关系表中的关系名称，获取统计工资信息
	List<Map<String, Object>> countFinanceSalaryTotalByClassifyName(@Param("countMonth") String countMonth);

	/**
	 * 批量新增财务工资小计汇总表数据
	 */
	int insertTcwFinanceSalaryTotalByList(List<TcwFinanceSalaryTotal> list);

	/**
	 * 获取小计表中所有的公司信息
	 */
	List<Map<String, Object>> getOrgNameByFinanceSalaryTotal(@Param("countMonth") String countMonth);

	/**
	 * 获取小计表中对应公司的统计信息
	 */
	List<Map<String, Object>> countFinanceSalaryTotalByOrgId(@Param("countMonth") String countMonth);

	/**
	 * 获取工资表中所有的公司信息
	 */
	List<Map<String, Object>> getOrgNameByUserPaySlip(@Param("countMonth") String countMonth);

	/**
	 * 获取工资表中对应公司的统计信息
	 */
	List<Map<String, Object>> countUserPaySlipByOrgId(@Param("countMonth") String countMonth);


	/**
	 * 删除职能费用申请子表
	 */
	public int deleteTcwRoleCostApplyItemByPbid(@Param("pbid")String pbid);

	/**
	 * 删除付款申请单子表
	 */
	public int deleteTcwPaymentApplyItemByPbid(@Param("pbid")String pbid);

	/*
	批量修改汇率计算表状态
	 */
	public int updateWanliExchangeRateStatus();

	/*
	 * 批量修改计算汇率-外币付款单
	 */
	public int updateTcwWanliOtherPaymentExchangeRate(@Param("exchangeRate") BigDecimal exchangeRate, @Param("listBid") List<String> listBid);

	/*
	 * 批量修改CNY金额-外币付款单
	 */
	public int updateTcwWanliOtherPaymentAmountCny(@Param("listBid") List<String> listBid);

	/**
	 * 删除费用结算返还单子表
	 */
	public int deleteTcwExpenseSettleReturnItemByPbid(@Param("pbid")String pbid);


	//运营公司预付款管理-获取统计：预付款认领单（TCW_CapitalBusinessCostSon）
	public List<Map<String, Object>> getCapitalBusinessCostCount(@Param("startTime") String startTime,@Param("endTime") String endTime);

	//运营公司预付款管理-获取统计：万里汇预付款入账单（TCW_WanliPrepaymentRecordedItem）
	public List<Map<String, Object>> getWanliPrepaymentRecordedCount(@Param("startTime") String startTime,@Param("endTime") String endTime);

	//运营公司预付款管理-获取统计：交易类型为：仓储服务→快递费及运费、运营服务→VAT税费、运营服务→透明计划标签费用
	public List<Map<String, Object>> getWithholdAmountCount(@Param("startTime") String startTime,@Param("endTime") String endTime);

	//运营公司预付款管理-获取统计：电子发票金额(TCW_ElectronicInvoice)
	public List<Map<String, Object>> getElectronicInvoiceCount(@Param("invoiceMonth") String invoiceMonth);

	//运营公司预付款管理-获取统计：形式发票金额(TCW_ProformaInvoice)
	public List<Map<String, Object>> getProformaInvoiceCount(@Param("startTime") String startTime,@Param("endTime") String endTime);

	//运营公司预付款管理-获取统计：预付款退回金额 = 预付款退回申请 -> 支付成功的
	public List<Map<String, Object>> getPreReturnAmountCount(@Param("startTime") String startTime,@Param("endTime") String endTime);


	/**
	 * 删除财务工资小计部门维护，根据关系名称
	 */
	public int deleteTcwFinanceSalaryClassifyByClassifyName(@Param("classifyName")String classifyName);
	
	/*
	 * 获取运营公司账户余额
	 */
	public BigDecimal getFjeOfTcwAccountCountForCompany(@Param("vgsbm")String vgsbm);


	/**
	 * 修改负载额度
	 */
	public int updateFzed(@Param("vgsbm")String vgsbm, @Param("fFzEd")BigDecimal fFzEd);


	/**
	 * 删除入账申请单子表
	 */
	public int deleteTcwEntryApplyItemByPbid(@Param("pbid")String pbid);


	/**
	 * 删除费用结算返还单被调用详情表信息 根据：被调用数据id 、 被调用单据类型（见枚举TcwExpenseSettleReturnUsedEnum）
	 */
	public int deleteExpenseSettleReturnUsedBySource(@Param("usedSourceId")long usedSourceId,@Param("usedSourceType")int usedSourceType);

}